// pages/login/login.js
const app = getApp()
const util = require('../../utils/util')
const api = require('../../utils/api')
import {
  getPhoneNumber,
  getTokenByCode,
  bindPhoneNumber,
  getUserInfo
} from '../../utils/request'
Page({
  data: {
    phone: '',
    isLoading: false,
    phoneInputFocus: false
  },

  onLoad: function () {
    // 检查是否已经登录
    const userInfo = wx.getStorageSync('userInfo')
    if (userInfo && userInfo.phone) {
      wx.redirectTo({
        url: '/pages/reservation/reservation'
      })
    }

    // 开发环境提示，微信小程序中我们直接显示调试信息
    console.log('开发环境提示：')
    console.log('- 使用139开头的手机号可直接登录')
    console.log('- 点击微信手机号按钮可自动获取手机号')
    console.log('- 无需输入车牌号')
  },

  onPhoneInput: function (e) {
    this.setData({
      phone: e.detail.value
    })
  },

  onPhoneFocus: function () {
    this.setData({
      phoneInputFocus: true
    })
  },

  onPhoneBlur: function () {
    this.setData({
      phoneInputFocus: false
    })
  },

  clearPhone: function () {
    this.setData({
      phone: ''
    })
  },

  // 获取微信手机号
  getWechatPhone(e) {
    console.log('getWechatPhone', e)

    if (e.detail.errMsg !== 'getPhoneNumber:ok') {
      util.showToast('获取手机号失败，请手动输入')
      return
    }

    this.setData({ isLoading: true })

    // 先 wx.login 获取临时登录 code
    wx.login({
      success: (loginRes) => {
        const loginCode = loginRes.code
        console.log('loginCode', loginCode)
        // 第一步：调用后端接口，根据 loginCode 获取 token
        getTokenByCode(loginCode)
          .then((tokenRes) => {
            console.log('getTokenByCode success', tokenRes)
            wx.setStorageSync('token', tokenRes.data.token)

            // 第二步：继续用 e.detail.code 获取手机号
            const phoneCode = e.detail.code
            getPhoneNumber(phoneCode)
              .then((phoneRes) => {
                console.log('getPhoneNumber success', phoneRes)
                if (phoneRes.data && phoneRes.data.phoneNumber) {
                  this.setData({ phone: phoneRes.data.phoneNumber })
                  util.showToast('手机号获取成功', 'success')
                } else {
                  util.showToast(phoneRes.message || '获取手机号失败')
                }
              })
              .catch((err) => {
                console.error('获取手机号异常:', err)
                util.showToast(err.message || '获取手机号失败，请手动输入')
              })
              .finally(() => {
                this.setData({ isLoading: false })
              })
          })
          .catch((err) => {
            console.error('获取 token 异常:', err)
            util.showToast('登录失败，请稍后再试')
            this.setData({ isLoading: false })
          })
      },
      fail: () => {
        util.showToast('wx.login 失败')
        this.setData({ isLoading: false })
      }
    })
  },
  validatePhone: function (phone) {
    const phoneReg = /^1[3-9]\d{9}$/
    return phoneReg.test(phone)
  },

  handleLogin: function () {
    const { phone } = this.data

    if (!this.validatePhone(phone)) {
      util.showToast('请输入正确的手机号')
      return
    }

    this.setData({ isLoading: true })

    // 先 wx.login 获取临时登录 code
    wx.login({
      success: (loginRes) => {
        const loginCode = loginRes.code
        console.log('手动登录 - loginCode', loginCode)
        
        // 第一步：调用后端接口，根据 loginCode 获取 token
        getTokenByCode(loginCode)
          .then((tokenRes) => {
            console.log('手动登录 - getTokenByCode success', tokenRes)
            wx.setStorageSync('token', tokenRes.data.token)

            // 第二步：绑定手机号
            bindPhoneNumber(phone)
              .then((res) => {
                console.log('手动登录 - bindPhoneNumber success', res)
                util.showToast(res.message || '绑定成功', 'success')
                
                // 第三步：获取用户信息
                getUserInfo()
                  .then((res) => {
                    console.log('手动登录 - getUserInfo success', res)
                    const userInfo = res.data
                    wx.setStorageSync('userInfo', userInfo)
                    wx.redirectTo({
                      url: '/pages/reservation/reservation'
                    })
                  })
                  .catch((err) => {
                    this.setData({ isLoading: false })
                    console.error('手动登录 - 获取用户信息异常:', err)
                    util.showToast(err.message || '获取用户信息失败')
                  })
              })
              .catch((err) => {
                this.setData({ isLoading: false })
                console.error('手动登录 - 绑定手机号异常:', err)
                util.showToast(err.message || '绑定手机号失败')
              })
          })
          .catch((err) => {
            this.setData({ isLoading: false })
            console.error('手动登录 - 获取 token 异常:', err)
            util.showToast('登录失败，请稍后再试')
          })
      },
      fail: () => {
        this.setData({ isLoading: false })
        util.showToast('登录失败，请稍后再试')
      }
    })
  }
})
